愉快的新手村已經結束了,是時候該進入進階一點的內容了XD
今天會仔細地介紹 Discord BOT 的權限設定。
在前幾天的文章,我都盡量輕描淡寫地帶過有關 Discord BOT 權限設定的部分,因為這邊可以討論的東西其實不少。
「權限」是 Discord 與其它通訊軟體的其中一個差異,同時也是 Discord 的特色之一。伺服器管理者可以給予其他伺服器成員「身分組」,身分組代表的就是「權限」,不同身分組的人可以做的事情或是查看的內容是不相同的。這部分的應用就有很多,例如:
對 Discord BOT 來說,它應該也需要有身分組,好讓伺服器管理者可以去控制它的權限。而這部分,Discord 都幫忙處理好了。在我們邀請 Discord BOT 進入伺服器的時候,就已經自動建立和授予身分組給 Discord BOT 了 (身分組名稱預設使用 Discord BOT 名稱)。
接下來,讓我們來查看一下 Discord BOT 的身分組設定與它的權限。
身分組的設定在伺服器設定中。
進入「身分組」分頁後,就可以開始設定身分組。此時,我們可以看到的確已經有一個與 Discord BOT 名稱相同的身分組了。
點擊進入 Discord BOT 身分組後,就可以編輯設定。
如果要修改權限,就要進入「整合」分頁。
下面可以看到先前 (Day 02) 所設定的權限 (當初是直接設為管理者)。
回到正題,在前幾天的文章中,有關 Discord BOT 權限的設定一共有三個地方:
Client
物件時,需要參數 intents
相信第二點應該挺好理解的,就跟平時使用第三方登入 (e.g. Google 登入) 來註冊帳號一樣,會跳出提示說網站需要取得某某資料的權限,要求同意授權。因此,接下來來討論一下第一、三點都有出現的 intents。
有關「intents」的中文翻譯我是參考自 Discord 的 Developer Help Center 內的文章。
我們一般所謂的「意圖 (intents)」,完整一點的稱呼應該是「閘道意圖 (gateway intents)」。
在 Discord,「意圖」是很重要的設定,它的概念跟「權限」差不多,只有擁有意圖的 Discord BOT,才能取得對應的資料。因此,Discord 要求開發者在操作 Discord BOT 時,需要設定意圖。而意圖一共有兩種,分別是:
標準意圖是可以隨意設定的,只需要在操作 Discord BOT 時設定好就,不需要再做額外的事情。如果是使用 default 的 intent,就已經把所有標準意圖都設定好了。
intents = discord.Intents.default()
特權意圖是用來限制查看敏感資訊用的,不只要在操作 Discord BOT 時設定,還需要在 Discord Developers 上手動打開開關。如果沒有打開,Discord BOT 一樣是拿不到資料的。
上面的開關一共有三個,包含:
接下來我們簡單測試看看,如果把 Message Content Intent 關掉,Quickstart 範例程式會有什麼變化?
為了方便 Demo,我們稍微調整一下,加了兩行
# day05.py
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f'We have logged in as {client.user}')
@client.event
async def on_message(message):
if message.author == client.user:
return
await message.channel.send("收到訊息了!")
if message.content.startswith('$hello'):
await message.channel.send('Hello!')
await message.channel.send("做完所有該做的事了!")
client.run('your token here')
首先,我們先來看看正常情況下的效果 (有打開 Message Content Intent 開關)。
結果,在啟動時,就直接被擋下來了XD
沒關係,還有另一個做法,只要先啟動好再關閉 Message Content Intent 開關就好了~
先來看一下關閉之前的效果:
關閉之後:
關閉之後,就 Discord BOT 就不回傳 Hello
了。因此,根據測試結果可以知道:
與把
intents.message_content = True
註解掉的效果相同
前面文章不停地強調意圖的設定很重要,但要如何知道某個功能需要什麼意圖?是否屬於特權意圖?
當然,只要閉上眼睛把 Discord Developers 上的三個特權意圖開關都打開就沒這個問題了
discord.py 在文件中有整理各個操作所需要的特權意圖,如果想要使用做上面列出的功能,就要記得去確認是否有把對應的開關打開。
至於標準意圖,其實在 discord.py 的 API 文件中都會提到,大家在開發的時候記得去文件查一下就好,後續我們的範例也都會包含到意圖的設定,不用擔心XD
今天我們介紹了 Discord BOT 各種有關權限的設定,包含了身分組、意圖 (intent)。
祝大家中秋節愉快~